home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / modula2 / module / bitblt.mod < prev    next >
Text File  |  1995-11-25  |  4KB  |  115 lines

  1. IMPLEMENTATION MODULE  BitBlt;
  2.  
  3. FROM SYSTEM IMPORT ADDRESS,ADR,VAL;
  4. FROM VDIInquires IMPORT ExtendedInquire;
  5. FROM GEMVDIBase IMPORT VDIWorkInType,VDIWorkOutType,BigPxyArrayType;
  6. FROM AES IMPORT GrafHandle;
  7. FROM Storage IMPORT ALLOCATE,DEALLOCATE;
  8. FROM VDIRasters IMPORT CopyRasterOpaque,MFDBType,MFDBptr;
  9. FROM GEMAESBase IMPORT AESIntOut;
  10.  
  11. PROCEDURE MemSize(W,H:CARDINAL; VAR Planes,wWidth :CARDINAL):CARDINAL;
  12. VAR CW,CH,BW,BH,
  13.     handle                    : INTEGER;
  14.     WorkOut                   : VDIWorkOutType;
  15. BEGIN
  16.    handle:=GrafHandle(CW,CH,BW,BH);
  17.    ExtendedInquire(handle,1,WorkOut);
  18.    Planes:=WorkOut[4];
  19.    IF Planes= 0 THEN HALT; END(*IF*);
  20.    wWidth:=(W DIV 16)+(W MOD 16);
  21.    RETURN( wWidth*2*H*Planes);
  22. END MemSize;
  23.  
  24. PROCEDURE CopyMemToScreen(x,y,w,h: INTEGER; buf: ADDRESS;DeAlloc :BOOLEAN );
  25. VAR CW,CH,BW,BH,
  26.     handle                    : INTEGER;
  27.     XYWH                      : BigPxyArrayType;
  28.     ScreenMFDB,MemoryMFDB     : MFDBType;
  29.     Size                      : CARDINAL;
  30.     BitPlanes, WBreite        : CARDINAL;
  31.  
  32.  
  33. BEGIN
  34.     XYWH[0]:=0; XYWH[1]:=0; XYWH[2]:=w; XYWH[3]:=h;
  35.     XYWH[4]:=x;XYWH[5]:=y;
  36.     XYWH[6]:=x+w;XYWH[7]:=y+h;
  37.     handle:=GrafHandle(CW,CH,BW,BH);
  38.     Size:= MemSize(w,h,BitPlanes,WBreite);
  39.     ScreenMFDB.pointer:=0D;
  40.     ScreenMFDB.width:=w;
  41.     ScreenMFDB.widthW:=WBreite;
  42.     ScreenMFDB.height:=h;
  43.     ScreenMFDB.format:=1;
  44.     ScreenMFDB.planes:=BitPlanes;
  45.     ScreenMFDB.rsrvd1:=0;
  46.     ScreenMFDB.rsrvd2:=0;
  47.     MemoryMFDB.pointer:=buf+(buf MOD 16D);
  48.     MemoryMFDB.width:=w;
  49.     MemoryMFDB.widthW:=WBreite;
  50.     MemoryMFDB.height:=h;
  51.     MemoryMFDB.format:=1;
  52.     MemoryMFDB.planes:=BitPlanes;
  53.     MemoryMFDB.rsrvd1:=0;
  54.     MemoryMFDB.rsrvd2:=0;
  55.     CopyRasterOpaque(handle,3,XYWH,ADR(MemoryMFDB),ADR(ScreenMFDB));
  56.     IF DeAlloc THEN DEALLOCATE(buf); END(*IF*);
  57. END CopyMemToScreen;
  58.  
  59. PROCEDURE CopyScreenToMem(x,y,w,h: INTEGER; VAR buf:ADDRESS);
  60. VAR CW,CH,BW,BH,
  61.     handle                    : INTEGER;
  62.     XYWH                      : BigPxyArrayType;
  63.     ScreenMFDB,MemoryMFDB     : MFDBType;
  64.     BitPlanes, WBreite        : CARDINAL;
  65. BEGIN
  66.   ALLOCATE(buf, MemSize(w,h,BitPlanes,WBreite));
  67.   IF buf#NIL THEN
  68.     handle:=GrafHandle(CW,CH,BW,BH);
  69.     ScreenMFDB.pointer:=0D;
  70.     ScreenMFDB.width:=w;
  71.     ScreenMFDB.widthW:=WBreite;
  72.     ScreenMFDB.height:=h;
  73.     ScreenMFDB.format:=1;
  74.     ScreenMFDB.planes:=BitPlanes;
  75.     ScreenMFDB.rsrvd1:=0;
  76.     ScreenMFDB.rsrvd2:=0;
  77.     XYWH[0]:=x; XYWH[1]:=y; XYWH[2]:=x+w; XYWH[3]:=y+h;
  78.     XYWH[4]:=0;XYWH[5]:=0; XYWH[6]:=w;XYWH[7]:=h;
  79.     MemoryMFDB.pointer:=buf+(buf MOD 16D);
  80.     MemoryMFDB.width:=w;
  81.     MemoryMFDB.widthW:=WBreite;
  82.     MemoryMFDB.height:=h;
  83.     MemoryMFDB.format:=1;
  84.     MemoryMFDB.planes:=BitPlanes;
  85.     MemoryMFDB.rsrvd1:=0;
  86.     MemoryMFDB.rsrvd2:=0;
  87.     CopyRasterOpaque(handle,3,XYWH,ADR(ScreenMFDB),ADR(MemoryMFDB));
  88.   END(*IF*);
  89. END CopyScreenToMem;
  90.  
  91. PROCEDURE CopyScreenToScreen(x,y,w,h,xDest,yDest :INTEGER);
  92. VAR CW,CH,BW,BH,Handle        : INTEGER;
  93.     XYWH                      : BigPxyArrayType;
  94.     Screen1MFDB,Screen2MFDB   : MFDBType;
  95.  
  96. BEGIN
  97.     Handle:=GrafHandle(CW,CH,BW,BH);
  98.     Screen1MFDB.pointer:=0D;
  99.     Screen1MFDB.width:=w;
  100.     Screen1MFDB.height:=h;
  101.     Screen1MFDB.format:=1;
  102.     Screen1MFDB.rsrvd1:=0; Screen1MFDB.rsrvd2:=0;
  103.     XYWH[0]:=x; XYWH[1]:=y; XYWH[2]:=w+x; XYWH[3]:=h+y;
  104.     XYWH[4]:=xDest;XYWH[5]:=yDest; XYWH[6]:=w+xDest;XYWH[7]:=h+yDest;
  105.     Screen2MFDB.pointer:=0D;
  106.     Screen2MFDB.width:=w;
  107.     Screen2MFDB.height:=h;
  108.     Screen2MFDB.format:=1;
  109.     Screen2MFDB.rsrvd1:=0; Screen2MFDB.rsrvd2:=0;
  110.     CopyRasterOpaque(Handle,3,XYWH,ADR(Screen1MFDB),ADR(Screen2MFDB));
  111. END  CopyScreenToScreen;
  112.  
  113.  
  114. END BitBlt.
  115.